Skip to content

Extract shared resolve_snap helper from duplicate plugin implementations#324

Merged
smethnani merged 2 commits intowork/classic-snap-prepare-image-pluginfrom
copilot/sub-pr-320-again
Apr 22, 2026
Merged

Extract shared resolve_snap helper from duplicate plugin implementations#324
smethnani merged 2 commits intowork/classic-snap-prepare-image-pluginfrom
copilot/sub-pr-320-again

Conversation

Copy link
Copy Markdown

Copilot AI commented Apr 21, 2026

_resolve_snap was duplicated verbatim across snap_preseed_plugin.py and uc_prepare_plugin.py, creating a divergence risk for snap reference handling.

Changes

  • imagecraft/plugins/_utils.py (new) — module-level resolve_snap(snap: str) -> str function; strips whitespace and converts name/channelname=channel for snap prepare-image
  • snap_preseed_plugin.py / uc_prepare_plugin.py — remove _resolve_snap instance methods; import and call resolve_snap from ._utils
  • tests/unit/plugins/test_utils.py (new) — parametrized tests for resolve_snap covering plain names, whitespace, local .snap paths, and channel references
# Before: each plugin had its own private method
def _resolve_snap(self, snap: str) -> str:
    snap = snap.strip()
    if "/" in snap and not snap.endswith(".snap"):
        name, channel = snap.split("/", 1)
        snap = f"{name}={channel}"
    return snap

# After: shared helper imported in both plugins
from ._utils import resolve_snap

Copilot AI changed the title [WIP] [WIP] Address feedback on snap prepare-image plugins PR Extract shared resolve_snap helper from duplicate plugin implementations Apr 21, 2026
Copilot AI requested a review from lengau April 21, 2026 20:20
@lengau lengau requested a review from smethnani April 21, 2026 21:50
@smethnani smethnani marked this pull request as ready for review April 22, 2026 08:09
@smethnani smethnani merged commit 86190fa into work/classic-snap-prepare-image-plugin Apr 22, 2026
2 checks passed
@smethnani smethnani deleted the copilot/sub-pr-320-again branch April 22, 2026 08:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants